"""
@Author : 合肥一元数智教育科技有限公司
@Date :  2025/6/5 8:35
@Description : 
通过创建多个进程的方式可以提升程序执行的效率，但是每开辟一个进程则会占用一定的计算机资源，为了实现多个任务的
并发执行，而开辟多个进行，在一定程度上是一种资源的浪费，创建多个进程实现任务的并发执行，本质上是利用了多个进程中
的线程实现的
QQ聊天    A  启动QQ程序   B 启动QQ程序

能不能直接在一个进程中创建多个线程，让多个线程共享进程中的资源，而且可以将多个任务交给一个进程中的多个线程去执行，
减少资源的浪费
QQ聊天  启动QQ程序     A  线程  窗口     B   线程 窗口

"""
import os
import time
import threading  # 线程模块


# 唱歌
def sing():
    sub_thead = threading.current_thread()
    sub_ident = sub_thead.ident
    sub_name = sub_thead.name
    print(f'当前线程的编号{sub_ident},名字{sub_name}')
    print(f'执行sing程序的进程号是:{os.getpid()}')
    for i in range(5):
        time.sleep(0.5)
        print('------sing-----')


# 跳舞
def dance():
    sub_thead = threading.current_thread()
    sub_ident = sub_thead.ident
    sub_name = sub_thead.name
    print(f'当前线程的编号{sub_ident},名字{sub_name}')
    print(f'执行dance程序的进程号是:{os.getpid()}')
    for i in range(5):
        time.sleep(1)
        print('------dance-----')


#  主进程  主线程  默认 主线程需要等待子线程执行结束才会结束
#
if __name__ == '__main__':
    # 获取线程信息
    current_thead = threading.current_thread()
    # 线程编号
    ident = current_thead.ident
    # 线程名字
    name = current_thead.name
    print(f'当前线程的编号{ident},名字{name}')
    # 获取进程编号
    print(f'执行main程序的进程号是:{os.getpid()}')

    # 创建线程   daemon 设置守护线程
    # t1 = threading.Thread(target=dance, daemon=True)
    t1 = threading.Thread(target=dance)
    t2 = threading.Thread(target=sing)
    # 设置守护线程  主线程执行结束后 守护线程强制结束
    # t2.daemon = True
    # 开启线程
    t1.start()
    t2.start()
    # time.sleep(2)
    print('--------------主线程任务结束--------------')
